import { Context } from 'koa';
const { getAdmList, getAdmListByPageInfo, getBylogname, getBylognameAndPageInfo, getCode, getInfoById, addAdmUser, update, deleteById } = require('../service/admUsers.service')
const { identityNotExisted } = require('../constants/err.type')

interface pageInfo {
    pageNum?: number,
    pageSize?: number
}

class AdmController {
    // 获取管理员列表
    public async getAdms(ctx: Context) {
        try {
            let res: any = null;
            let { pageNum, pageSize }: pageInfo = ctx.query;
            if (pageNum && pageSize) {
                pageNum = Math.max(pageNum * 1, 1);
                pageSize = Math.max(pageSize * 1, 1);
                res = await getAdmListByPageInfo(pageNum, pageSize);
            } else {
                res = await getAdmList();
            }
            ctx.body = {
                code: 200,
                message: '获取管理员列表成功',
                result: {
                    ...res
                }
            }
        } catch (error) {
            console.error('获取管理员列表失败', error)
        }
    }
    // 根据名字模糊获取管理员列表
    public async getlogname(ctx: Context) {
        try {
            const logname = ctx.query.logname;
            let res: any = null;
            let { pageNum, pageSize }: pageInfo = ctx.query;
            if (pageNum && pageSize) {
                pageNum = Math.max(pageNum * 1, 1);
                pageSize = Math.max(pageSize * 1, 1);
                res = await getBylognameAndPageInfo(pageNum, pageSize, logname);
            } else {
                res = await getBylogname(logname);
            }
            ctx.body = {
                code: 200,
                message: '获取管理员列表成功',
                result: {
                    ...res
                }
            }
        } catch (error) {
            console.error('获取管理员列表失败', error)
        }
    }
    // 获取授权码
    public async getAuthorizationCode(ctx: Context) {
        try {
            const role = ctx.query.role
            const res: any = await getCode(role);
            if(!res) {
                return ctx.app.emit('error', identityNotExisted, ctx)
            }
            ctx.body = {
                code: 200,
                message: '获取授权码成功',
                result: res
            }
        } catch (error) {
            console.error('获取授权码失败', error)
        }
    }
    // 根据id获取管理员
    public async getAdmById(ctx: Context) {
        try {
            const id = ctx.params.id
            const res: any = await getInfoById(id);
            ctx.body = {
                code: 200,
                message: '获根据id获取管理员成功',
                result: res
            }
        } catch (error) {
            console.error('根据id获取管理员失败', error)
        }
    }
    // 添加管理员
    public async addAdm(ctx: Context) {
        try {
            const res = await addAdmUser(ctx.request.body);
            ctx.body = {
                code: 200,
                message: '添加管理员成功',
                result: {
                    id: res.id,
                    logname: res.logname
                }
            }
        } catch (error) {
            console.error('添加管理员失败', error)
        }
    }
    // 更新管理员
    public async updateAdm(ctx: Context) {
        try {
            const id = ctx.params.id
            const newUser = ctx.request.body
            const oldUser = await getInfoById(id) 
            if(newUser.role == oldUser.role) delete newUser.role
            const res = await update(id, ctx.request.body);
            if(res) {
                ctx.body = {
                    code: 200,
                    message: `更新管理员${ctx.request.body.logname}成功`,
                }
            }
        } catch (error) {
            console.error('更新管理员失败', error)
        }
    }
    // 删除管理员
    public async deleteAdmById(ctx: Context) {
        try {
            const id = ctx.params.id
            const res = await deleteById(id)
            if(res) {
                ctx.body = {
                    code: 200,
                    message: '删除该管理员成功'
                }
            } else {
                ctx.body = {
                    code: 500,
                    message: '删除该管理员失败'
                }
            }
        } catch (error) {
            console.error('删除管理员失败', error)
        }
    }
}

module.exports = new AdmController()